package com.example.hw01;

import javax.servlet.ServletException; // 导入 Servlet 异常类
import javax.servlet.annotation.WebServlet; // 导入 Servlet 注解
import javax.servlet.http.*; // 导入与 HTTP 相关的类
import java.io.IOException; // 导入 IO 异常类
import java.util.*; // 导入 Java.util 包中的所有类

// 声明这是一个 Servlet，映射的 URL 是 /PurchaseServlet
@WebServlet(name = "PurchaseServlet", urlPatterns = "/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
    // 序列版本 UID，用于序列化
    private static final long serialVersionUID = 1L;

    // 处理 HTTP GET 请求的方法
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // 从请求中获得用户购买的商品 ID
        String id = req.getParameter("id");

        // 如果 ID 为 null，表示没有传递有效的商品 ID
        if (id == null) {
            // 重定向用户到图书列表页面
            String url = "ListBookServlet";
            resp.sendRedirect(url);
            return; // 结束方法执行
        }

        // 根据 ID 从 CakeDB 获取对应的蛋糕对象
        Cake book = CakeDB.getBook(id);

        // 创建或获得用户的 Session 对象
        HttpSession session = req.getSession();

        // 从 Session 中获取用户的购物车
        List<Cake> cart = (List<Cake>) session.getAttribute("cart");

        // 如果购物车为 null，说明用户是首次购买
        if (cart == null) {
            // 创建一个新的购物车 (List 集合模拟购物车)
            cart = new ArrayList<Cake>();
            // 将购物车存入 Session 对象
            session.setAttribute("cart", cart);
        }

        // 将购买的商品添加到购物车中
        cart.add(book);

        // 创建一个 Cookie 存放 Session 的标识号
        Cookie cookie = new Cookie("JSESSIONID", session.getId());
        cookie.setMaxAge(60 * 30); // 设置 Cookie 有效期为 30 分钟
        cookie.setPath("/Servlet"); // 设置 Cookie 的有效路径

        // 将 Cookie 添加到响应中
        resp.addCookie(cookie);

        // 重定向用户到购物车页面
        String url = "CartServlet";
        resp.sendRedirect(url);
    }
}
